#ifndef __EXTERNSORT_H__
#define __EXTERNSORT_H__

#include "AuxiliaryFile.h"
#include "datatypes.h"

#define QUANTITY_REG_FILE_DIVIDE	100	//cantidad de registros de cada archivo dividido
#define QUANTITY_OPEN_FD			10	//cantidad maxima de archivos abiertos simultaneamente para hacer el merge

typedef vector<string> FilesToMergeListNames;

class ExternSort{
	public:
	ExternSort(string nameIn, string nameOut);
	~ExternSort();
	
	/*
	Divide el archivo de entrada, a medida que lee registros odena y escribe el nuevo archivo ordenado
	Devuelve true si tuvo exito, false si no
	*/
	bool DivideSort(void);
	/*
	Realiza el merge de todos los archivosm parciales
	*/
	bool Merge(void);

	
	private:
	
	AuxiliaryFile* fileIn;
	FilesToMergeListNames listNames; //guarda el nombre de todos los archivos a mergear
	string nameIn, nameOut;
	
};

#endif // __EXTERNSORT_H__
